package message

// IMessage 消息接口
type IMessage interface {
	GetDataLen() uint32 // 获取消息数据长度
	GetMsgId() uint32   // 获取消息ID
	GetData() []byte    // 获取消息内容

	SetDataLen(uint32) // 设置消息数据长度
	SetMsgId(uint32)   // 设置消息ID
	SetData([]byte)    // 设置消息内容
}

// Message 消息结构体
type Message struct {
	DataLen uint32 // 消息的长度
	Id      uint32 // 消息的ID
	Data    []byte // 消息的内容
}

// GetDataLen 获取消息数据长度
func (m *Message) GetDataLen() uint32 {
	return m.DataLen
}

// GetMsgId 获取消息ID
func (m *Message) GetMsgId() uint32 {
	return m.Id
}

// GetData 获取消息内容
func (m *Message) GetData() []byte {
	return m.Data
}

// SetDataLen 设置消息数据长度
func (m *Message) SetDataLen(len uint32) {
	m.DataLen = len
}

// SetMsgId 设置消息ID
func (m *Message) SetMsgId(id uint32) {
	m.Id = id
}

// SetData 设置消息内容
func (m *Message) SetData(data []byte) {
	m.Data = data
}

// 新建一个消息体
func NewMessage(msgId uint32, data []byte) IMessage {
	message := &Message{
		Id:      msgId,
		DataLen: uint32(len(data)),
		Data:    data,
	}
	return message
}
